home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-03
/
qbfaqr01.zip
/
GWINT.BAS
< prev
next >
Wrap
BASIC Source File
|
1992-08-10
|
3KB
|
76 lines
100 ' MEESCALL.BAS demonstrates how to call mouse functions in GW-BASIC
110 '
120 ' Author: Christy Gemmell
130 ' Date: 15/9/1991
140 '
150 ' Load general-purpose interrupt service interface.
160 '
170 DEFINT A-Z: CLS: PRINT: KEY OFF
180 DIM REG.IN(7), REG.OUT(7)
190 AX = 0: BX = 1: CX = 2: DX = 3: SI = 4: DI = 5: DS = 6: ES = 7
200 SYSINT$ = SPACE$(116)
210 FOR X = 1 TO 116
220 READ A$: MID$(SYSINT$, X, 1) = CHR$(VAL("&H" + A$))
230 NEXT
240 '
250 ' Test out some mouse functions with it.
260 '
270 INT.NO = &H33 ' Microsoft Mouse driver interrupt number
280 '
290 ' Reset Mouse and get status
300 '
310 REG.IN(AX) = 0: GOSUB 770
320 IF REG.OUT(AX) = 0 THEN PRINT "Mouse not installed!": BEEP: STOP
330 PRINT "A"; REG.OUT(BX); "- button mouse is available"
340 PRINT "Turning on the Mouse pointer"
350 PRINT: PRINT "Press the <Esc> key to quit"
360 '
370 ' Show Mouse pointer
380 '
390 REG.IN(AX) = 1: GOSUB 770
400 '
410 ' Main control loop
420 '
430 IF INKEY$ = CHR$(27) THEN GOTO 600
440 '
450 ' Get Mouse pointer and button status
460 '
470 REG.IN(AX) = 3: GOSUB 770
480 LOCATE 10, 1: PRINT "X ="; REG.OUT(CX); " "
490 LOCATE 11, 1: PRINT "Y ="; REG.OUT(DX); " "
500 LOCATE 13, 1
510 IF REG.OUT(BX) = 1 THEN PRINT "Left Button Down" ELSE PRINT SPACE$(20)
520 LOCATE 14, 1
530 IF REG.OUT(BX) = 3 THEN PRINT "Centre Button Down" ELSE PRINT SPACE$(20)
540 LOCATE 15, 1
550 IF REG.OUT(BX) = 2 THEN PRINT "Right Button Down" ELSE PRINT SPACE$(20)
560 GOTO 430
570 '
580 ' Hide Mouse pointer
590 '
600 REG.IN(AX) = 2: GOSUB 770
610 END
620 '
630 ' Machine-language opcodes
640 '
650 DATA 55, 8B, EC, 8B, 5E, 0A, 8B, 07, 8B, 5E, 06, 8B, CB
660 DATA 8B, 5E, 08, 06, 1E, E8, 05, 00, 00, 00, CD, 00, C3
670 DATA 5D, 88, 46, 03, 89, 4E, 00, 8B, 4F, 04, 8B, 57, 06
680 DATA 8B, 77, 08, 8B, 7F, 0A, 8B, 47, 0E, 3D, FF, FF, 74
690 DATA 02, 8E, C0, 8B, 47, 0C, 3D, FF, FF, 74, 02, 8E, D8
700 DATA 36, 8B, 07, 36, 8B, 5F, 02, E8, CC, FF, 53, 8B, 5E
710 DATA 00, 36, 89, 07, 36, 8F, 47, 02, 8C, D8, 36, 89, 47
720 DATA 0C, 1F, 8C, C0, 89, 47, 0E, 07, 89, 4F, 04, 89, 57
730 DATA 06, 89, 77, 08, 89, 7F, 0A, 5D, CA, 06, 00, 00
740 '
750 ' Call machine-language routine
760 '
770 X = VARPTR(SYSINT$)
780 SYSINT! = PEEK(X + 1) + 256 * PEEK(X + 2)
790 CALL SYSINT!(INT.NO, REG.IN(0), REG.OUT(0))
800 RETURN
'BTW That assembly-language routine can be used for other things than
'the mouse. It is actually a general-purpose program which you can use
'to make DOS (INT 21h) and BIOS (INT 10h, INT 16h etc) interrupt calls.
'In effect a GW-BASIC version of QuickBASIC's CALL INTERRUPT.